//
//  EZTableViewDelegateManager.h
//  EZFastBuildManager_Example
//
//  Created by 陈诚 on 2019/12/5.
//  Copyright © 2019 melo30. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "EZTableViewSectionModel.h"

NS_ASSUME_NONNULL_BEGIN

@class EZTableViewDelegateManager;
@protocol EZTableViewDelegateManagerDelegate <NSObject>

/// 必须实现的代理方法
/// @param manager manager实例
- (NSArray <EZTableViewSectionModel *> *)dataSource:(EZTableViewDelegateManager *)manager;

@optional

// ****下面的都是一些可选方法: 基本都是tableView的同名代理方法，为了保证完整性还是尽可能多的列举出来以便需要的时候用到****//

/// 选中某一个cell，类似tableView的didSelectRow方法
/// @param model 当前的rowModel
/// @param manager manager实例
- (void)didSelectRowAtModel:(EZTableViewRowModel *)model manager:(EZTableViewDelegateManager *)manager indexPath:(NSIndexPath *)indexPath;

- (void)cellInitializeWithModel:(EZTableViewRowModel *)model cell:(UITableViewCell *)cell manager:(EZTableViewDelegateManager *)manager indexPath:(NSIndexPath *)indexPath;

- (void)scrollViewDidScroll:(UIScrollView *)scrollView manager:(EZTableViewDelegateManager *)manager;

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section;
- (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view forSection:(NSInteger)section;
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath;
- (void)tableView:(UITableView *)tableView didEndDisplayingHeaderView:(UIView *)view forSection:(NSInteger)section;
- (void)tableView:(UITableView *)tableView didEndDisplayingFooterView:(UIView *)view forSection:(NSInteger)section;

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
@end

@interface EZTableViewDelegateManager : NSObject

@property (nonatomic, weak) id <EZTableViewDelegateManagerDelegate> delegate;

@property (nonatomic, strong) UITableView *tableView;

/// 调此方法会去调一次数据源的代理方法
- (void)reloadData;

@end

NS_ASSUME_NONNULL_END
